ext4: fix bitmap position validation
authorLukas Czerner <lczerner@redhat.com>
Tue, 24 Apr 2018 15:31:44 +0000 (11:31 -0400)
committerRaspbian forward porter <root@raspbian.org>
Sat, 5 May 2018 11:51:50 +0000 (12:51 +0100)
commit9b6303727f5336178cd2dc5bd50b4765b5fd0430
treed92c5c43c4ed41a9bf630464a9730bde5278cb87
parent8bf542b377ef3e71c2dcd7d9b6a12e18da7a2502
ext4: fix bitmap position validation

Currently in ext4_valid_block_bitmap() we expect the bitmap to be
positioned anywhere between 0 and s_blocksize clusters, but that's
wrong because the bitmap can be placed anywhere in the block group. This
causes false positives when validating bitmaps on perfectly valid file
system layouts. Fix it by checking whether the bitmap is within the group
boundary.

The problem can be reproduced using the following

mkfs -t ext3 -E stride=256 /dev/vdb1
mount /dev/vdb1 /mnt/test
cd /mnt/test
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.3.tar.xz
tar xf linux-4.16.3.tar.xz

This will result in the warnings in the logs

EXT4-fs error (device vdb1): ext4_validate_block_bitmap:399: comm tar: bg 84: block 2774529: invalid block bitmap

[ Changed slightly for clarity and to not drop a overflow test -- TYT ]

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reported-by: Ilya Dryomov <idryomov@gmail.com>
Fixes: 7dac4a1726a9 ("ext4: add validity checks for bitmap block numbers")
Cc: stable@vger.kernel.org
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name ext4-fix-bitmap-position-validation.patch
fs/ext4/balloc.c